﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using DevExpress.XtraReports.UI;
using Microsoft.Practices.CompositeUI;
using NetROS.Tiers.Data.Bases;
using NetROS.Tiers.Entities;
using NetROS.Tiers.Services;
using NetRosApp.Infrastructure.Interface.Base;
using ReportiFin;


namespace NetRosApp.FinPart.Views.BaseEditors
{
    public class AdvOpenIzvjestaj : BaseAdvOtvaranjeIzvjestaja
    {


        private int impersinate = 0;
        private int brojkopija = 1;
        public void ShowReportForEntity(Object sender, Object entitet, WorkItem WorkItem)
        {
            XtraReport _report = null;
            string naziv = string.Empty;
            int tipispisa = 0;
            AdvReportSelectorFrm _tmpfrm;
            System.Collections.ArrayList _tmpList;
            List<IzjestajiListe> _tmpListeAdv;
            brojkopija = 1;
            if ((sender is BlagajnaViewPresenter || sender is BlagajnaTraziPresenter))
            {

                _tmpfrm = new AdvReportSelectorFrm();
                _tmpList = new System.Collections.ArrayList();
                _tmpList.Add("Blagajnički izvještaj");
                _tmpList.Add("Ulatnice / Isplatnice");
                _tmpfrm.LBIzabir.DataSource = _tmpList;
                _tmpfrm.LBIzabir.SelectedIndex = 0;
                if (_tmpfrm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    if (_tmpfrm.LBIzabir.SelectedItem.ToString() == "Blagajnički izvještaj")
                    {
                        VwBlagajnaIzvjestajSaldo ent = (VwBlagajnaIzvjestajSaldo)entitet;
                        VwBlagajnaStavkaParameterBuilder vwBlagajnaStavkaParameterBuilder =
                            new VwBlagajnaStavkaParameterBuilder();
                        vwBlagajnaStavkaParameterBuilder.AppendEquals(VwBlagajnaStavkaColumn.IDBlagajnaIzvjestaj,
                                                                      ent.ID.ToString());
                        ent.VwBlagajnaStavkeCollection =
                            WorkItem.Services.Get<VwBlagajnaStavkaService>().Find(
                                vwBlagajnaStavkaParameterBuilder.GetParameters(),
                                "DatumDokumenta asc,NazivTipStavke desc");
                        _report = new BlagajnickiIzvjestajIspis(ent, (String)WorkItem.RootWorkItem.Items["CompanyName"]);

                        //_report.Name = string.Format("Isplatna lista za mjesec {0}", ((Obracun) entitet).DatumOd.Month);
                        base.OpenReportAdv("Blagajnički izvještaj", _report, WorkItem, _tmpfrm.tipispisa);
                    }
                    if (_tmpfrm.LBIzabir.SelectedItem.ToString() == "Ulatnice / Isplatnice")
                    {
                        VwBlagajnaIzvjestajSaldo ent = (VwBlagajnaIzvjestajSaldo)entitet;
                        VwBlagajnaStavkaParameterBuilder vwBlagajnaStavkaParameterBuilder =
                            new VwBlagajnaStavkaParameterBuilder();
                        vwBlagajnaStavkaParameterBuilder.AppendEquals(VwBlagajnaStavkaColumn.IDBlagajnaIzvjestaj,
                                                                      ent.ID.ToString());
                        ent.VwBlagajnaStavkeCollection =
                            WorkItem.Services.Get<VwBlagajnaStavkaService>().Find(
                                vwBlagajnaStavkaParameterBuilder.GetParameters(),
                                "DatumDokumenta asc,NazivTipStavke desc");
                        _report = new UplatniceIsplatniceIspis(ent.VwBlagajnaStavkeCollection);

                    }
                    //_report.Name = string.Format("Isplatna lista za mjesec {0}", ((Obracun) entitet).DatumOd.Month);
                    base.OpenReportAdv("Blagajnički izvještaj", _report, WorkItem, _tmpfrm.tipispisa);

                }

            }

            if ((sender is PutniNalogTraziPresenter || sender is PutniNalogViewPresenter))
            {

                _tmpList = new System.Collections.ArrayList();

                _tmpfrm = new AdvReportSelectorFrm();
                _tmpListeAdv = new List<IzjestajiListe>();
                DodavanjeIzvjestaja.DodajIzvjestajDefault(_tmpListeAdv, "Nalog za službeno putovanje");
                DodavanjeIzvjestaja.DodajIzvjestajDefault(_tmpListeAdv, "Obračun naloga za službeno putovanje");
                DodavanjeIzvjestaja.DodajIzvjestajeuListu(_tmpListeAdv, "Putni_nalog");
                _tmpfrm.LBIzabir.DataSource = _tmpListeAdv;
                _tmpfrm.LBIzabir.SelectedIndex = 0;
                if (_tmpfrm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    IzjestajiListe selectedItem = (IzjestajiListe)_tmpfrm.LBIzabir.SelectedItem;

                    if (selectedItem.TipIspia == "Lokalno")
                    {
                        if (selectedItem.NazivIzvjestaja == "NalogZaPutovanje")
                        {
                            VwPopisPutnihNaloga ent = (VwPopisPutnihNaloga)entitet;
                            _report = new NalogZaPutovanje(ent, (String)WorkItem.RootWorkItem.Items["CompanyName"]);
                            _report.LoadLayout(selectedItem.File);
                            _report.Name = string.Format("{0} {1}", selectedItem.Ispis, ent.Oznaka);

                            base.OpenReportAdv(_report.Name, _report, WorkItem, _tmpfrm.tipispisa);

                        }

                        if (selectedItem.NazivIzvjestaja == "ObracunPutovanja")
                        {
                            VwPopisPutnihNaloga ent = (VwPopisPutnihNaloga)entitet;

                            DataSet dsobracun = NetROS.Tiers.Data.DataRepository.Provider.ExecuteDataSet(
                                                "[fin].[_tblPutniNalog_ObracunNalogaByIDNaloga]", ent.ID);
                            _report = new ObracunPutovanja(dsobracun);
                            _report.LoadLayout(selectedItem.File);
                            _report.Name = string.Format("{0} {1}", selectedItem.Ispis, ent.Oznaka);

                            base.OpenReportAdv(_report.Name, _report, WorkItem, _tmpfrm.tipispisa);

                        }

                    }
                    else
                    {

                        if (_tmpfrm.LBIzabir.SelectedItem.ToString() == "Nalog za službeno putovanje")
                        {
                           if (entitet is VList<VwPopisPutnihNaloga>)
                           {
                               

                               VList<VwPopisPutnihNaloga> lista = entitet as VList<VwPopisPutnihNaloga>;

                               XtraReport mainreport =  new NalogZaPutovanje(lista, (String) WorkItem.RootWorkItem.Items["CompanyName"]);
                                 mainreport.Name = string.Format("Nalog za službeno putovanje lista");    
                               //mainreport.CreateDocument();
                               //for (int i = 1; i < lista.Count; i++)
                               //{
                               
                               //    XtraReport reportun = new NalogZaPutovanje(lista[i], (String) WorkItem.RootWorkItem.Items["CompanyName"]);
                               //    reportun.CreateDocument();
                               //    mainreport.Pages.AddRange(reportun.Pages);
                                   
                                   
                                   
                               //    //int id = 0;
                               //    //string oznaka = "";
                               //    //if (ent is VwPopisPutnihNaloga)
                               //    //{
                               //    //    ent = (VwPopisPutnihNaloga) entitet;
                               //    //    id = ent.ID;
                               //    //    oznaka = ent.Oznaka;
                               //    //}

                               //}
                               //mainreport.PrintingSystem.ContinuousPageNumbering = true;
                               //mainreport.CreateDocument();
                               //mainreport.ShowPreviewDialog();
                               
                                base.OpenReportAdv(mainreport.Name, mainreport, WorkItem, _tmpfrm.tipispisa);

                           }
                           else
                           {
                               VwPopisPutnihNaloga ent = null;
                               int id = 0;
                               string oznaka = "";
                               if (entitet is VwPopisPutnihNaloga)
                               {
                                   ent = (VwPopisPutnihNaloga) entitet;
                                   id = ent.ID;
                                   oznaka = ent.Oznaka;
                               }
                               _report = new NalogZaPutovanje(ent, (String) WorkItem.RootWorkItem.Items["CompanyName"]);
                               _report.Name = string.Format("Nalog za službeno putovanje {0}", oznaka);

                               //WorkItem.EventTopics[EventTopicNames.PrikaziIzvjestaj].Fire(this, new EventArgs<object, string>(_repzgp, String.Format("Otkaz rezervacije {0}", _entity.Oznaka)), WorkItem, PublicationScope.Global);
                               base.OpenReportAdv(_report.Name, _report, WorkItem, _tmpfrm.tipispisa);
                           }
                        }
                        if (_tmpfrm.LBIzabir.SelectedItem.ToString() == "Obračun naloga za službeno putovanje")
                        {
                              if (entitet is VList<VwPopisPutnihNaloga>)
                              {
                                     VList<VwPopisPutnihNaloga> lista = entitet as VList<VwPopisPutnihNaloga>;

                                  //   VwPopisPutnihNaloga ent;
                                  //int id = 0;
                                  //string oznaka = "";

                                  List<DataSet> _list = new List<DataSet>();
                                  foreach (VwPopisPutnihNaloga vwPopisPutnihNaloga in lista)
                                  {
                                  DataSet dsobracun = NetROS.Tiers.Data.DataRepository.Provider.ExecuteDataSet(
                                      "[fin].[_tblPutniNalog_ObracunNalogaByIDNaloga]", vwPopisPutnihNaloga.ID);    
                                      _list.Add(dsobracun);
                                  }
                                  

                                  //     dsobracun.WriteXmlSchema("C:\\DataSetObracunNalogaByIDNaloga.xml");
                                  
                                  
                                  _report = new ObPutGrupa(_list);
                                  _report.Name = string.Format("Obračun naloga za službeno putovanje lista");

                                  //_ds.WriteXmlSchema("C:\\DataSetPutniNalogObracunNalogaByIDNaloga");
                                  //WorkItem.EventTopics[EventTopicNames.PrikaziIzvjestaj].Fire(this, new EventArgs<object, string>(_repzgp, String.Format("Otkaz rezervacije {0}", _entity.Oznaka)), WorkItem, PublicationScope.Global);
                                  base.OpenReportAdv(_report.Name, _report, WorkItem, _tmpfrm.tipispisa);
                              }
                              else
                              {


                                  VwPopisPutnihNaloga ent;
                                  int id = 0;
                                  string oznaka = "";
                                  if (entitet is VwPopisPutnihNaloga)
                                  {
                                      ent = (VwPopisPutnihNaloga) entitet;
                                      id = ent.ID;
                                      oznaka = ent.Oznaka;
                                  }

                                  DataSet dsobracun = NetROS.Tiers.Data.DataRepository.Provider.ExecuteDataSet(
                                      "[fin].[_tblPutniNalog_ObracunNalogaByIDNaloga]", id);

                                  //     dsobracun.WriteXmlSchema("C:\\DataSetObracunNalogaByIDNaloga.xml");
                                  _report = new ObracunPutovanja(dsobracun);
                                  _report.Name = string.Format("Obračun naloga za službeno putovanje {0}",
                                                               oznaka.Replace("/", " "));

                                  //_ds.WriteXmlSchema("C:\\DataSetPutniNalogObracunNalogaByIDNaloga");
                                  //WorkItem.EventTopics[EventTopicNames.PrikaziIzvjestaj].Fire(this, new EventArgs<object, string>(_repzgp, String.Format("Otkaz rezervacije {0}", _entity.Oznaka)), WorkItem, PublicationScope.Global);
                                  base.OpenReportAdv(_report.Name, _report, WorkItem, _tmpfrm.tipispisa);
                              }
                        }
                    }
                }
            }
        }
    }
}